package de.codecasa.andro.kasse;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;



// Adapter-Klasser für die Artikelliste
public class adcArtikelList extends BaseAdapter implements OnItemClickListener {
		private final LayoutInflater mInflater;
		private Context context;
		private dbActions ds;
		
		private clsErrorManager errM = new clsErrorManager(); 
		
		private List<dsrArtikel> AList = new ArrayList<dsrArtikel>();
				
		
		
		// Konstruktor der Klasse
		public adcArtikelList(Context context, List<dsrArtikel> ArtikelListe, dbActions datasource) {
			this.context = context;
			this.AList = ArtikelListe;
			this.ds = datasource;
			
			mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		}
		
		// Gibt die Anzahl der Listenelemente zurück
		public int getCount() {
			return AList.size();
		}
		
		// Gibt ein Listenelement zurück
		public dsrArtikel getItem(int position) {
			return AList.get(position);
		}
		
		// Gibt die aktuelle ID des Listenelement's zurück 
		public long getItemId(int position) {
			return (long) position;
		}
		
		
		// Gibt das View zurück
		public View getView(int position, View convertView, ViewGroup parent) {
			LinearLayout itemView = (LinearLayout) mInflater.inflate(R.layout.mylistitemlayout, parent, false);
			bindView(itemView, position);
			return itemView;
		}
		
		
		// bindView Methode
		private void bindView(LinearLayout view, int position) {
			dsrArtikel datensatz = getItem(position);
			
			view.setId((int) getItemId(position));
			TextView nummerTextView = (TextView) view.findViewById(R.id.Nummer);
			TextView preisTextView = (TextView) view.findViewById(R.id.Preis);
			TextView nameTextView = (TextView) view.findViewById(R.id.Name);
			
			nummerTextView.setText(String.valueOf(datensatz.getANr()));
			preisTextView.setText(String.valueOf(datensatz.getpreis()) + " €"); 
			nameTextView.setText(datensatz.gettext());
			
		}
		
		// onClick-Event des Item's einrichten
		public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
			// Meldung ausgeben oder Intent bauen und Activity starten
			final dsrArtikel gewaehlterDatensatz = AList.get(position);
			
			final Dialog dialog = new Dialog(context, R.style.stlDialog);
			dialog.setContentView(R.layout.artikel_edit);
			
			dialog.show();


			// Widgets einbinden
			Button btnCancel = (Button) dialog.findViewById(R.id.btnCancel);
			Button btnSave = (Button) dialog.findViewById(R.id.btnSave);
			final TextView txtArtikel = (TextView) dialog.findViewById(R.id.txtArtikel);
			final TextView txtPreis = (TextView) dialog.findViewById(R.id.txtPreis);


			String[] items = new String[] {"Speisen", "Getränke"};
			final Spinner spinner = (Spinner) dialog.findViewById(R.id.chkKat);
			ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item , items);
			adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
			spinner.setAdapter(adapter);			
			
			
			// Widget's mit den Werten der DB befüllen
			txtArtikel.setText(gewaehlterDatensatz.gettext());
			txtPreis.setText(String.valueOf(gewaehlterDatensatz.getpreis()));
			spinner.setSelection(gewaehlterDatensatz.getKat() - 1);
			
			
			
			
			
			// onClick-Event des Abbrechen Buttons
			btnCancel.setOnClickListener(new OnClickListener()
			{
				public void onClick(View v){dialog.dismiss();}
			});

			
			// onClick-Event des Speichern Buttons
			btnSave.setOnClickListener(new OnClickListener()
			{
				public void onClick(View v)
				{
					
					gewaehlterDatensatz.settext(String.valueOf(txtArtikel.getText()));
					gewaehlterDatensatz.setpreis(BigD(String.valueOf(txtPreis.getText())));
					gewaehlterDatensatz.setKat(spinner.getSelectedItemPosition()+1);
					
					ds.open();
					ds.updateOne(gewaehlterDatensatz, context);
					ds.close();
					
					
					ds.open();
					AList = ds.getArtikel("");
					ds.close();
					
					dialog.dismiss();
					
					updateLV();
					
					
				}
			});

			
			
		}
		

		// Ein Update des gebundenen ListView
		private void updateLV()
		{
			
			this.notifyDataSetChanged();
			
		}


		// Hilfsfunktion welche ein String in ein BigDecimal umwandelt
		private BigDecimal BigD(String txtIn)
		{
			BigDecimal rbd = new BigDecimal("0.00");

			if(txtIn.length() > 0)
			{			
				String newStringToParse = txtIn.replace(",", ".");
				rbd = new BigDecimal(newStringToParse);
			}
	
			return rbd;
		}		
		

}

	
	
	

